﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Ledenadministratie
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Vars
        LidSoorten soortLid;
        bool LidGeselecteerd = false;

        public MainWindow()
        {
            InitializeComponent();
        }

        #region Control events
        // Voeg een nieuw lid toe
        private void btnToevoegen_Click(object sender, RoutedEventArgs e)
        {
            bool IsValide = true;
            int leeftijd = 0;

            // Controleer eerst wat de leeftijd van het nieuwe lid is
            if (Regex.IsMatch(this.tboxLeeftijd.Text, "^[0-9]{1,3}$"))
            {
                leeftijd = Convert.ToInt32(this.tboxLeeftijd.Text);
            }
            else
            {
                IsValide = false;
                MessageBox.Show("U heeft geen of een ongeldige leeftijd opgegeven");
            }

            // Controleer of de leeftijd overeenstemt met de selectie
            if (IsValide)
            {
                if (soortLid == LidSoorten.Senior && leeftijd < 18)
                {
                    IsValide = false;
                    MessageBox.Show("Senioren moeten minstens 18 jaar oud zijn");
                }
                else if (soortLid == LidSoorten.Junior && leeftijd >= 18)
                {
                    IsValide = false;
                    MessageBox.Show("Junioren kunnen niet ouder dan 18 jaar oud zijn");
                }
            }

            // Controleer of een naam is ingevuld
            if (this.tboxNaam.Text.Length == 0 && IsValide)
            {
                IsValide = false;
                MessageBox.Show("U dient een naam op te geven");
            }

            // Controleer of een type lid is geselecteerd
            if (!LidGeselecteerd && IsValide)
            {
                IsValide = false;
                MessageBox.Show("U dient een soort lid aan te geven");
            }
            
            // Indien alle velden goed zijn mag het lid worden toegevoegd
            if (IsValide)
            {
                if (soortLid == LidSoorten.Senior)
                {
                    SeniorObject seniorObject = new SeniorObject(this.tboxNaam.Text, this.tboxAdres.Text, leeftijd, this.cboxCompetitie.IsChecked.Value);
                    this.lboxLedenlijst.Items.Add(seniorObject);
                }
                else
                {
                    PersoonObject persoonObject = new PersoonObject(this.tboxNaam.Text, this.tboxAdres.Text, leeftijd, soortLid);
                    this.lboxLedenlijst.Items.Add(persoonObject);
                }
            }
        }

        // Geef aan wie de oudste senior is
        private void btnOudsteSenior_Click(object sender, RoutedEventArgs e)
        {
            int hoogsteLeeftijd = 0;
            SeniorObject oudstePersoon = null;
            string SpeeltCompetitie = string.Empty;

            // Haal alle objecten op uit de ledenlijst
            foreach (Object persoon in this.lboxLedenlijst.Items)
            {
                // Controleer of het object een SeniorObject is en cast deze over een nieuw object
                if (persoon is SeniorObject)
                {
                    SeniorObject senior = (SeniorObject)persoon;

                    // Ga steeds na of de leeftijd van het huidige object hoger is dan de vorige
                    if (senior.Leeftijd > hoogsteLeeftijd)
                    {
                        hoogsteLeeftijd = senior.Leeftijd;
                        oudstePersoon = senior;
                    }
                }
            }

            if (oudstePersoon != null && oudstePersoon.SpeeltCompetitie)
            {
                SpeeltCompetitie = "Ja";
            }
            else
            {
                SpeeltCompetitie = "Nee";
            }

            if (oudstePersoon != null)
            {
                MessageBox.Show("Het oudste seniorlid is:\r\nNaam: " + oudstePersoon.Naam +
                    "\r\nLeeftijd: " + oudstePersoon.Leeftijd +
                    "\r\nSoort lid: " + oudstePersoon.SoortLid +
                    "\r\nAdres: " + oudstePersoon.Adres +
                    "\r\nSpeelt competitie: " + SpeeltCompetitie);
            }
            else
            {
                MessageBox.Show("Er zijn geen senior leden.");
            }
        }

        // Geef aan wat de gemiddelde leeftijd van de aspiranten is
        private void btnGemiddeldeLeeftijdAspirant_Click(object sender, RoutedEventArgs e)
        {
            int gemiddeldeLeeftijd = 0;
            int counter = 0;

            // Haal alle objecten op uit de ledenlijst
            foreach (Object persoon in this.lboxLedenlijst.Items)
            {
                // Controleer of het object een SeniorObject is en cast deze over een nieuw object
                if (persoon is PersoonObject)
                {
                    PersoonObject lid = (PersoonObject)persoon;

                    // Tel alle leeftijden op voor aspirante leden
                    if (lid.SoortLid == LidSoorten.Aspirant)
                    {
                        gemiddeldeLeeftijd += lid.Leeftijd;
                        counter++;
                    }
                }
            }

            // Reken het gemiddelde uit
            if (counter != 0)
            {
                gemiddeldeLeeftijd = gemiddeldeLeeftijd / counter;
                MessageBox.Show("De gemiddelde leeftijd van aspirantleden is: " + gemiddeldeLeeftijd);
            }
            else
            {
                MessageBox.Show("Er zijn geen aspirante leden.");
            }            
        }

        // Verander het type lid middels de radiobuttons
        private void radAspirant_Checked(object sender, RoutedEventArgs e)
        {
            soortLid = LidSoorten.Aspirant;
            this.cboxCompetitie.IsEnabled = false;
            LidGeselecteerd = true;
        }
        private void radJunior_Checked(object sender, RoutedEventArgs e)
        {
            soortLid = LidSoorten.Junior;
            this.cboxCompetitie.IsEnabled = false;
            LidGeselecteerd = true;
        }
        private void radSenior_Checked(object sender, RoutedEventArgs e)
        {
            soortLid = LidSoorten.Senior;
            this.cboxCompetitie.IsEnabled = true;
            LidGeselecteerd = true;
        }

        // Ledenlijst selectie
        private void lboxLedenlijst_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            PersoonObject persoonObject = (PersoonObject)this.lboxLedenlijst.SelectedItem;
            this.tboxLidgegevens.Text = "Naam: " + persoonObject.Naam;
            this.tboxLidgegevens.Text += Environment.NewLine;
            this.tboxLidgegevens.Text += "Leeftijd: " + persoonObject.Leeftijd;
            this.tboxLidgegevens.Text += Environment.NewLine;
            this.tboxLidgegevens.Text += "Soort lid: " + persoonObject.SoortLid;
            this.tboxLidgegevens.Text += Environment.NewLine;
        }
        #endregion
    }
}
